﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Csla;
using Telerik.Web.UI;

namespace Sireass.Asp.Administracion
{
    public partial class SeguridadPrestadoresServicioSocial : System.Web.UI.Page
    {
        #region Page
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Cargando el listado de prestadores
                CargaListadoPrestadores();
                //Cargando los combos
                //Escuela
                radCmbEscuela.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Escuela"));
                radCmbEscuela.DataBind();
                //Carrera
                radCmbCarrera.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Carrera"));
                radCmbCarrera.DataBind();
                //Sexo
                radCmbSexo.DataSource = NombreValorTinyList.GetNombreValorTinyList(new SingleCriteria<string>("Cat_Sexo"));
                radCmbSexo.DataBind();
                //Perfil
                radCmbPerfil.DataSource = NombreValorTinyList.GetNombreValorTinyList(new SingleCriteria<string>("Cat_Perfil"));
                radCmbPerfil.DataBind();
               radCmbPerfil.SelectedValue = "4"; //Perfil prestador servicio social
               radCmbPerfil.Enabled = false;
                
            }
            else
            {
                lblError.Text = string.Empty;
                lblExito.Text = string.Empty;
            }
        }
        #endregion

        #region Botones
        protected void radBtnBuscar_Click(object sender, EventArgs e)
        {
            divDatosPrestador.Visible = true;
            lblRegistroEdicion.Text = "Registro";
            radBtnBuscar.Visible = false;
            radbtnCancelar.Visible = false;
            radTxtCurp.Enabled = false;
            radBtnGuardar.Visible = true;
            radBtnRegresar.Visible = true;
        }

        protected void radbtnCancelar_Click(object sender, EventArgs e)
        {
            LimpiaControlesBusqueda();
            mvwAdministracionPrestadores.ActiveViewIndex = 0;

        }

        protected void radBtnRegresar_Click(object sender, EventArgs e)
        {
            mvwAdministracionPrestadores.ActiveViewIndex = 0;
            ControlesIniciales();
        }

        protected void radBtnGuardar_Click(object sender, EventArgs e)
        {
            if (radBtnGuardar.Text == "Guardar")
            {

                if (InsertarPrestador() == true)
                {
                    lblExito.Text = "Operación realizada con éxito";
                }
                else return;
            }
            else //actualizar 
            {
                long intIdPrestador = (long)ViewState["vwsIdPrestador"];
                if (ActualizarPrestador(intIdPrestador) == true)
                {
                    lblExito.Text = "Operación realizada con éxito";

                }
                else return;
            }

            mvwAdministracionPrestadores.ActiveViewIndex = 0;
            CargaListadoPrestadores();
            lblExito.Text = "Operación realizada con éxito";
            ControlesIniciales();
        }


        protected void btnCambiarPassword_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            if (btn.CommandName == "CambiarPswd")
            {
                btn.CommandName = "CancelarCambiarPswd";
                btn.Text = "Cancelar";
                rfvPassword.Enabled = true;
                rfvConfPassword.Enabled = true;
                lblPassword.Visible = true;
                lblConfPassword.Visible = true;
                radTxtPassword.Visible = true;
                radTxtConfPassword.Visible = true;
            }
            else
            {
                btn.CommandName = "CambiarPswd";
                btn.Text = "Cambiar contraseña";
                rfvPassword.Enabled = false;
                rfvConfPassword.Enabled = false;
                lblPassword.Visible = false;
                lblConfPassword.Visible = false;
                radTxtPassword.Visible = false;
                radTxtConfPassword.Visible = false;
            }
        }

        #endregion
        #region Grid
        protected void radGrdListado_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            try
            {
                long intIdPrestador;
                switch (e.CommandName)
                {
                    case "Editar":
                        intIdPrestador = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdPrestador");
                        ViewState["vwsIdPrestador"] = intIdPrestador;
                        if (CargaDatosPrestador(intIdPrestador) == true)
                        {
                            lblRegistroEdicion.Text = "EDICIÓN";
                            mvwAdministracionPrestadores.ActiveViewIndex = 1;
                            radBtnGuardar.Text = "Actualizar";
                            radBtnGuardar.Visible = true;
                            radBtnRegresar.Visible = true;
                            ControlesEdicion(true);
                    
                        }
                        else return;
                        break;
                    case "Nuevo":
                        ControlesEdicion(false);
                        mvwAdministracionPrestadores.ActiveViewIndex = 1;
                        break;

                    case "Eliminar":
                        intIdPrestador = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdPrestador");
                        if (EliminarPrestador(intIdPrestador) == true)
                        {
                            lblExito.Text = "Operación realizada con éxito";
                            CargaListadoPrestadores();

                        }

                        break;

                    default: break;

                }

            }


            catch (Exception ex)
            {
                lblError.Text = ex.Message;
            }
        }

        protected void radGrdListado_PageIndexChanged(object sender, Telerik.Web.UI.GridPageChangedEventArgs e)
        {
            CargaListadoPrestadores();
        }

        protected void radGrdListado_PageSizeChanged(object sender, Telerik.Web.UI.GridPageSizeChangedEventArgs e)
        {
            CargaListadoPrestadores();
        }

        protected void radGrdListado_PreRender(object sender, EventArgs e)
        {
            try
            {
                CheckBox chk;
                string strHabilitado;

                foreach (GridDataItem celda in radGrdListado.Items)
                {
                    chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
                    strHabilitado = celda["Habilitado"].Text;

                    if (strHabilitado == "True")
                        chk.Checked = true;

                    else
                        chk.Checked = false;
                }


            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
            }
        }

        #endregion

        #region Métodos
        /// <summary>
        /// Establece el estado inicial de los controles del formulario
        /// </summary>
        private void ControlesIniciales()
        {
            LimpiaControlesBusqueda();
            //Formulario
            radTxtNombre.Text = string.Empty;
            radTxtAPaterno.Text = string.Empty;
            radTxtAMaterno.Text = string.Empty;
            radCmbSexo.ClearSelection();
            radCmbSexo.Text = string.Empty;
            radMskTelefono.Text = string.Empty;
            radMskTelCelular.Text = string.Empty;
            radTxtEmail.Text = string.Empty;
            radMskNoCuenta.Text = string.Empty;
            radCmbEscuela.ClearSelection();
            radCmbEscuela.Text = string.Empty;
            radCmbCarrera.ClearSelection();
            radCmbCarrera.Text = string.Empty;
            radBtnRegresar.Visible = false;
            radBtnGuardar.Visible = false;
            radBtnGuardar.Text = "Guardar";
            divDatosPrestador.Visible = false;
            rfvPassword.Enabled = true;
            rfvConfPassword.Enabled = true;
            radTxtUsuario.Text = string.Empty;
            btnCambiarPassword.Visible = false;
            btnCambiarPassword.CommandName = "CambiarPswd";
            btnCambiarPassword.Text = "Cambiar contraseña";
            chkActivo.Checked = false;
        }

        /// <summary>
        /// Limpia los controles de la sección de búsqueda
        /// </summary>
        private void LimpiaControlesBusqueda()
        {
            //Búsqueda
            lblRegistroEdicion.Text = "Búsqueda";
            radBtnBuscar.Visible = true;
            radTxtCurp.Enabled = true;
            radbtnCancelar.Visible = true;
            radTxtCurp.Text = string.Empty;
        }

        /// <summary>
        /// Llena el grid con el listado de prestadores
        /// </summary>
        /// <returns></returns>
        protected Boolean CargaListadoPrestadores()
        {
            try
            {
                radGrdListado.DataSource = PrestadorList.GetPrestadorList();
                radGrdListado.DataBind();
                return true;

            }

            catch (Exception ex)
            {
                lblError.Text = ex.Message;
                return false;

            }
        }

        /// <summary>
        /// Carga los datos del prestador
        /// </summary>
        /// <param name="intIdPrestador">IdPrestador</param>
        /// <returns></returns>
        protected Boolean CargaDatosPrestador(long intIdPrestador)
        {
            try
            {
                //Datos prestador
                PrestadorEdit objPrestadorEdit = PrestadorEdit.GetPrestadorEdit(intIdPrestador);
                radMskNoCuenta.Text = objPrestadorEdit.NumeroCuenta;
                radCmbCarrera.SelectedValue = Convert.ToString(objPrestadorEdit.IdCarrera);
                radCmbEscuela.SelectedValue = Convert.ToString(objPrestadorEdit.IdEscuela);
                chkActivo.Checked = objPrestadorEdit.Habilitado;
                //objPrestadorEdit.IdEstatusPrestador = 1;    /////¡¡¡¡¡CAMBIAR
                //Datos persona
                PersonaEdit objPersonaEdit = PersonaEdit.GetPersonaEdit(objPrestadorEdit.IdPersona);
                radTxtNombre.Text = objPersonaEdit.Nombre;
                radTxtAPaterno.Text = objPersonaEdit.ApellidoPaterno;
                radTxtAMaterno.Text = objPersonaEdit.ApellidoMaterno;
                radCmbSexo.SelectedValue = Convert.ToString(objPersonaEdit.ldSexo);
                radMskTelefono.Text = objPersonaEdit.TelefonoCasa;
                radMskTelCelular.Text = objPersonaEdit.TelefonoCelular;
                radTxtEmail.Text = objPersonaEdit.CorreoElectronico;
                radTxtCurp.Text = objPersonaEdit.Curp;
                //Datos usuario
                UsuarioEdit objUsuarioEdit = UsuarioEdit.GetUsuarioEdit(new UsuarioCriteria(objPersonaEdit.IdPersona, true));
               radTxtUsuario.Text = objUsuarioEdit.Usuario;
                
               
                return true;
            }
            catch
            {
                lblError.Text = "Ocurrió un error al consultar los datos del prestador. Inténtelo de nuevo";
                return false;
            }

        }

        /// <summary>
        /// Elimina los datos del prestador, incluyendo los de persona y usuario
        /// </summary>
        /// <param name="intIdPrestador">IdPrestador</param>
        /// <returns></returns>
        protected Boolean EliminarPrestador(long intIdPrestador)
        {
            try
            {

                PrestadorEdit prestador = PrestadorEdit.GetPrestadorEdit(intIdPrestador);
				prestador.Delete();
				PersonaEdit persona = PersonaEdit.GetPersonaEdit(prestador.IdPersona);
				persona.Delete();
				UsuarioEdit usuario = UsuarioEdit.GetUsuarioEdit(new UsuarioCriteria(prestador.IdPersona, true));
				usuario.Delete();
				PerfilUsuarioEdit perfilUsuario = PerfilUsuarioEdit.GetPerfilUsuarioEdit(new PerfilUsuarioCriteria(usuario.IdUsuario, true));
				perfilUsuario.Delete();

				PrestadorUpdater.Update(persona, prestador, usuario, perfilUsuario);
                return true;
            }

            catch
            {
                lblError.Text = "Ocurrió un error al eliminar. Inténtelo de nuevo";
                return false;
            }
        }

        /// <summary>
        /// Inserta los datos del prestador, asi como los de persona y usuario
        /// </summary>
        /// <returns></returns>
        protected Boolean InsertarPrestador()
        {
            try
            {
                //Persona
                PersonaEdit objPersonaEdit = PersonaEdit.NewPersonaEdit();
                objPersonaEdit.ApellidoPaterno = radTxtAPaterno.Text;
                objPersonaEdit.ApellidoMaterno = radTxtAMaterno.Text;
                objPersonaEdit.Nombre = radTxtNombre.Text;
                objPersonaEdit.TelefonoCasa = radMskTelefono.Text;
                objPersonaEdit.TelefonoCelular = radMskTelCelular.Text;
                objPersonaEdit.CorreoElectronico = radTxtEmail.Text;
                objPersonaEdit.ldSexo = Convert.ToByte(radCmbSexo.SelectedValue);
                objPersonaEdit.Habilitado = chkActivo.Checked;
                objPersonaEdit.Curp = radTxtCurp.Text;
                //Prestador
                PrestadorEdit objPrestadorEdit = PrestadorEdit.NewPrestadorEdit();
                objPrestadorEdit.IdEscuela = Convert.ToInt64(radCmbEscuela.SelectedValue);
                objPrestadorEdit.IdCarrera = Convert.ToInt64(radCmbCarrera.SelectedValue);
                objPrestadorEdit.IdEstatusPrestador = 1;
                objPrestadorEdit.NumeroCuenta = radMskNoCuenta.Text;
                objPrestadorEdit.Habilitado = chkActivo.Checked;
                objPrestadorEdit.IdEstatusPrestador = 1;    /////¡¡¡¡¡CAMBIAR
                //Usuario
                UsuarioEdit objUsuarioEdit = UsuarioEdit.NewUsuarioEdit();
                objUsuarioEdit.Usuario = radTxtUsuario.Text;
                objUsuarioEdit.Password = radTxtPassword.Text;
                objUsuarioEdit.Habilitado = chkActivo.Checked;
                //Perfil
                PerfilUsuarioEdit objPerfilUsuarioEdit = PerfilUsuarioEdit.NewPerfilUsuarioEdit();
                objPerfilUsuarioEdit.IdPerfil = Convert.ToByte(radCmbPerfil.SelectedValue);
                objPerfilUsuarioEdit.Habilitado = chkActivo.Checked;
                PrestadorUpdater.Update(objPersonaEdit, objPrestadorEdit, objUsuarioEdit, objPerfilUsuarioEdit);

                return true;
            }

            catch (Exception ex)
            {

                lblError.Text = ex.Message;
                return false;
            }

        }

        /// <summary>
        /// Actualiza los datos del prestador
        /// </summary>
        /// <param name="intIdPrestador">IdPrestador</param>
        /// <returns></returns>
        protected Boolean ActualizarPrestador(long intIdPrestador)
        {
            try
            {
                PrestadorEdit objPrestadorEdit = PrestadorEdit.GetPrestadorEdit(intIdPrestador);
                PersonaEdit objPersonaEdit = PersonaEdit.GetPersonaEdit(objPrestadorEdit.IdPersona);
                UsuarioEdit objUsuarioEdit = UsuarioEdit.GetUsuarioEdit(new UsuarioCriteria(objPersonaEdit.IdPersona, true));
                PerfilUsuarioEdit objPerfilUsuarioEdit = PerfilUsuarioEdit.GetPerfilUsuarioEdit(new PerfilUsuarioCriteria(objUsuarioEdit.IdUsuario, true));
                //Persona
                objPersonaEdit.ApellidoPaterno = radTxtAPaterno.Text;
                objPersonaEdit.ApellidoMaterno = radTxtAMaterno.Text;
                objPersonaEdit.Nombre = radTxtNombre.Text;
                objPersonaEdit.TelefonoCasa = radMskTelefono.Text;
                objPersonaEdit.TelefonoCelular = radMskTelCelular.Text;
                objPersonaEdit.CorreoElectronico = radTxtEmail.Text;
                objPersonaEdit.ldSexo = Convert.ToByte(radCmbSexo.SelectedValue);
                objPersonaEdit.Habilitado = chkActivo.Checked;
                objPersonaEdit.Curp = radTxtCurp.Text;
                //Prestador
                objPrestadorEdit.IdEscuela = Convert.ToInt64(radCmbEscuela.SelectedValue);
                objPrestadorEdit.IdCarrera = Convert.ToInt64(radCmbCarrera.SelectedValue);
                objPrestadorEdit.IdEstatusPrestador = 1;    /////¡¡¡¡¡CAMBIAR
                objPrestadorEdit.NumeroCuenta = radMskNoCuenta.Text;
                objPrestadorEdit.Habilitado = chkActivo.Checked;

                //Usuario
                objUsuarioEdit.Usuario = radTxtUsuario.Text;
                if (btnCambiarPassword.Text == "Cancelar")
                {
                    objUsuarioEdit.Password = radTxtPassword.Text;
                }
                objUsuarioEdit.Habilitado = chkActivo.Checked;

                //Perfil
                objPerfilUsuarioEdit.IdPerfil = Convert.ToByte(radCmbPerfil.SelectedValue);
                objPerfilUsuarioEdit.Habilitado = chkActivo.Checked;
               
                PrestadorUpdater.Update(objPersonaEdit, objPrestadorEdit, objUsuarioEdit, objPerfilUsuarioEdit);

               

                return true;
            }
            catch
            {
                lblError.Text = "Ocurrió un error al actualizar los datos del prestador. Inténtelo de nuevo";
                return false;
            }

        }

        /// <summary>
        /// Establece el estado para los controles del formulario, para el caso de edición y el de inserción
        /// </summary>
        /// <param name="blnEsEdicion">Es <c>true</c> si se trata de la edición</param>
        private void ControlesEdicion(Boolean blnEsEdicion)
        {
            divDatosPrestador.Visible = blnEsEdicion;
            radBtnBuscar.Visible = !blnEsEdicion;
            radbtnCancelar.Visible = !blnEsEdicion;
            radTxtCurp.Enabled = !blnEsEdicion;
            lblPassword.Visible = !blnEsEdicion;
            radTxtPassword.Visible = !blnEsEdicion;
            lblConfPassword.Visible = !blnEsEdicion;
            radTxtConfPassword.Visible = !blnEsEdicion;
            btnCambiarPassword.Visible = blnEsEdicion;
            rfvConfPassword.Enabled = !blnEsEdicion;
            rfvPassword.Enabled = !blnEsEdicion;
        }
        #endregion

      
     



    }
}